package conversion.utils;

import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.CharacterCodingException;
import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.StandardCharsets;

/**
 * 实用类，用于计算文件大小（根据文件文本内容）
 */
public class FileUtil {

    /**
     * 计算目标字符串的字节数
     *
     * @param str 目标字符串
     * @return 目标字符串的字节数
     */
    public static long estimateFileSize(String str) {
        Charset charset = StandardCharsets.UTF_8;
        CharsetEncoder encoder = charset.newEncoder();
        ByteBuffer buffer;
        try {
            buffer = encoder.encode(CharBuffer.wrap(str));
        } catch (CharacterCodingException e) {
            e.printStackTrace();
            return 0;
        }
        return buffer.limit();
    }

    /**
     * 根据目标字符串的字节数得到规范大小
     *
     * @param size 目标字符串的字节数
     * @return 规范化后的目标字符串大小
     */
    public static String formatFileSize(long size) {
        String[] units = new String[]{"B", "KB", "MB", "GB", "TB"};
        int unitIndex = 0;
        double sizeInDouble = (double) size;
        while (sizeInDouble > 1024 && unitIndex < units.length - 1) {
            sizeInDouble /= 1024;
            unitIndex++;
        }
        return String.format("%.2f %s", sizeInDouble, units[unitIndex]);
    }
}
